﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using ATEC.GeometryNET;
using SSDPNET.Geom;
using ATEC.ATDataCoreNET;

namespace GeometryExample
{
    /// <summary>
    /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/基础方法。
    /// 内容：参见下文各函数的注释。
    /// </summary>
    public class UseSomeBasicMethods
    {
        //获取当前激活Scene
        public static ATSceneRef scene = SSDPNET.ScenesFunctions.SceneRefGetActive();

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/CurveSet的基础常见方法。
        /// 功能：演示更多CurveSet的用法: 计算质心、法向量、面积；获取三围包围盒；求点到曲线上最近点；求曲线的长度。
        /// 关键类及说明：
        ///     CurveSet: BasicCurve的集合。此类可以是一组没有关系的BasicCurve，也可以组合多个BasicCurve，表达封闭多边形、开放线条，进而可以进行求交、分割、求面积等操作.
        ///               玄镜平台几何话题，大多数场景下，线集与“轮廓”经常互用；线集与“曲线”(广义的，封闭、非封闭；平面、非平面)经常互用.
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void DoSomeCurveSetFuncs()
        {
            CurveSet curve = CreateCurveSetMethods.CreateCurveSet(); // 创建一个曲线集合对象
            if (curve == null) // 如果曲线集合对象为空，则直接返回
            {
                return;
            }

            // 计算轮廓的质心、法向量、面积
            CalCurveInfo(curve.Clone()); // 对曲线集合对象的克隆副本进行计算

            // 获取轮廓的信息
            CurveSet.BoundaryType type = curve.GetBoundaryType(); // 获取轮廓的边界类型
            bool isClosed = curve.IsClosedPath(); // 判断轮廓是否是闭合路径
            bool isOpen = curve.IsOpenPath(); // 判断轮廓是否是开放路径
            bool isPhysicallyClosed = curve.IsPhysicallyClosedPath(); // 判断轮廓是否是物理闭合路径

            // 获取三维范围盒
            XRange3d range; // 声明一个三维范围盒变量
            curve.GetRange(out range); // 获取曲线的范围盒并赋值给变量

            // 以XY平面视角看，测试给定点在曲线内、曲线上还是曲线外
            XPoint3d spacePt = new XPoint3d(-21, 10, 10); // 创建一个三维空间点
            CurveSet.InOutClassification inOut = curve.PointInOnOutXY(spacePt); // 判断空间点在曲线内、曲线上还是曲线外

            // 搜索任一包含曲线上最近的点
            CurveDescInfo detail = curve.ClosestPointBounded(spacePt); // 搜索最近点并返回详细信息
            if (detail != null) // 如果找到最近点
            {
                long componentIndex = detail.ComponentIndex; // 获取最近点所在的子曲线（BasicCurve)的索引
                double componentFrac = detail.ComponentFraction; // 获取最近点在所属的子曲线上的长度比例值.
                double frac = detail.Fraction; // 获取最近点的参数值
                XPoint3d pt = detail.Point; // 获取最近点的坐标
            }

            // 返回曲线的质心和长度
            double length; // 声明一个长度变量
            XPoint3d centriod; // 声明一个质心坐标变量
            bool isSuccess = curve.WireCentroid(out length, out centriod); // 计算曲线的质心和长度并返回成功标志
        }


        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/CurveSet的基础常见方法。
        /// 功能：演示更多CurveSet的用法: 计算Curve的质心，法向量和面积
        /// 关键类及说明：
        ///     CurveSet: BasicCurve的集合。此类可以是一组没有关系的BasicCurve，也可以组合多个BasicCurve，表达封闭多边形、开放线条，进而可以进行求交、分割、求面积等操作.
        ///               玄镜平台几何话题，大多数场景下，线集与“轮廓”经常互用；线集与“曲线”(广义的，封闭、非封闭；平面、非平面)经常互用.
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void CalCurveInfo(CurveSet curve)
        {
            {
                if (curve == null)
                {
                    return; // 如果曲线集为空，则返回
                }
                XPoint3d centroid = new XPoint3d(); // 定义质心变量
                XVector3d normalVec = new XVector3d(); // 定义法向量变量
                double area; // 定义面积变量
                curve.CentroidNormalArea(out centroid, out normalVec, out area); // 计算质心、法向量和面积

                // 计算线串的长度
                double length = curve.SumOfLengths(); // 计算曲线的总长度

                string msgDouble = "面积" + area.ToString("f3") + "长度" + length.ToString("f3"); // 构建面积和长度的字符串
                string msgCent = "质心" + centroid.X.ToString("f3") + "," + centroid.Y.ToString("f3") + "," + centroid.Z.ToString("f3"); // 构建质心的字符串
                string msgVec = "法向量" + normalVec.X.ToString("f3") + "," + normalVec.Y.ToString("f3") + "," + normalVec.Z.ToString("f3"); // 构建法向量的字符串

                SSDPNET.ATDlgFuncs.DialogDmsgsPrint(msgDouble); // 打印面积和长度信息
                SSDPNET.ATDlgFuncs.DialogDmsgsPrint(msgCent); // 打印质心信息
                SSDPNET.ATDlgFuncs.DialogDmsgsPrint(msgVec); // 打印法向量信息
            }

        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/XSegment3d的基础常见方法。
        /// 功能：演示更多XSegment3d的用法: 获取线段上的点、最近的线段、距离空间点最近的线段上的点等。
        /// 关键类及说明：
        ///     XSegment3d: 表示三维空间中的线段。此类提供了多种方法来操作和查询线段，包括获取线段上的点、计算线段长度、找到最近的线段等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void DoSomeXSegmentFuncs()
        {
            XSegment3d seg1 = CreateCurveSetMethods.CreateHorizonXseg(); // 创建一个水平线段
            XSegment3d seg2 = CreateCurveSetMethods.CreateXSegmentFromStartEnd(); // 从起点和终点创建一个线段

            {// 获取线段上给定比例的点
                double frac = 0.5; // 定义比例值
                XVector3d derivate1, derivate2; // 定义导数变量
                XPoint3d pt = seg1.PointAtFraction(frac, out derivate1, out derivate2); // 获取线段上给定比例的点及其导数
            }

            {// 获取最近的线段
                XSegment3d seg; // 定义线段变量
                double frac1, frac2; // 定义比例值变量
                bool isSuccess = XSegment3d.ClosestApproachSegment(seg1, seg2, out seg, out frac1, out frac2); // 获取最近的线段及其比例值
            }

            {// 距离空间点最近的线段上的点
                XPoint3d point = new XPoint3d(-70, -50, 5); // 定义空间点
                bool bounded0 = true; // 定义是否有界变量
                bool bounded1 = false; // 定义是否有界变量
                double frac; // 定义比例值变量
                XPoint3d closePt; // 定义最近点变量

                seg1.ClosestFractionAndPoint(point, bounded0, bounded1, out frac, out closePt); // 获取距离空间点最近的线段上的点及其比例值
            }

            {// 获取起始比例-终点比例之间的长度
                double fractionA = 0.2; // 定义起始比例
                double fractionB = 0.8; // 定义终点比例
                double length = seg1.SignedDistanceBetweenFractions(fractionA, fractionB); // 获取起始比例-终点比例之间的长度
            }

            {// 找到两个有界线段的最近点和最近比例
                double fraction0, fraction1; // 定义比例值变量
                XPoint3d pt1, pt2; // 定义最近点变量
                SSDPNET.Geom.XSegment3dExtension.ClosestApproachBounded(out fraction0, out fraction1, out pt1, out pt2, seg1, seg2); // 找到两个有界线段的最近点和最近比例
            }

            {// 计算空间点在线段上的投影点和参数
                XPoint3d point = new XPoint3d(-70, -50, 5); // 定义空间点
                XPoint3d closestPoint; // 定义最近点变量
                double closestParam; // 定义最近参数变量
                bool isSuccess = seg2.ProjectPoint(out closestPoint, out closestParam, point); // 计算空间点在线段上的投影点和参数
            }
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/XEllipse3d的基础常见方法。
        /// 功能：演示更多XEllipse3d的用法: 计算圆弧的长度、角度、属性值等。
        /// 关键类及说明：
        ///     XEllipse3d: 表示三维空间中的椭圆弧。此类提供了多种方法来操作和查询椭圆弧，包括计算长度、获取角度、获取属性值等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void DoSomeXEllipseFuncs()
        {
            XEllipse3d arc = CreateCurveSetMethods.CreateXEllipse3d_FromCenterRadiusNormal(); // 从中心、半径和法向量创建一个椭圆弧
            XEllipse3d arcNotFull = CreateCurveSetMethods.CreateXEllipse3d_FromFraction(); // 从比例创建一个不完整的椭圆弧
            SSDPNET.ValidatedXEllipse3d acr = CreateCurveSetMethods.CreateXEllipse3d_FromStartPtTangentNormalRadiusSweep(); // 从起点、切线、法向量、半径和扫掠角创建一个椭圆弧

            {
                double length = arc.ArcLength(); // 计算圆弧的长度
            }

            {
                XAngle angle = arc.AngleAtFraction(0.3); // 计算给定比例处的角度
            }

            {
                double centerX, centerY, centerZ, vector0X, vector0Y, vector0Z, vector90X, vector90Y, vector90Z, startRadians, sweepRadians; // 定义属性值变量
                acr.Value().Get(out centerX, out centerY, out centerZ, out vector0X, out vector0Y,
                 out vector0Z, out vector90X, out vector90Y, out vector90Z, out startRadians, out sweepRadians); // 获取圆弧的属性值
            }

            {
                XAngle thetaAngle = XAngle.PI; // 定义参数角
                XVector3d derivate1, derivate2; // 定义导数变量
                XPoint3d ptAtAngle = arc.PointAtAngle(thetaAngle, out derivate1, out derivate2); // 计算圆弧上的点对应的参数角
            }

            {
                double theta = 0.4 * System.Math.PI; // 定义参数角
                XPoint3d pt = arc.RadiansToPoint(theta); // 返回圆弧给定参数角对应的空间点
            }

            {
                if (!arcNotFull.IsFull())
                {
                    // 如果不完整，将圆弧以现有的方向扫掠完整的360°
                    arcNotFull.MakeFullSweep(); // 将圆弧以现有的方向扫掠完整的360°
                }
            }

            {
                double angleSt, angleEnd; // 定义起始与终止角度变量
                arc.GetLimits(out angleSt, out angleEnd); // 获取椭圆弧的起始与终止角度
            }

            {
                XPoint3d centerOut; // 定义中心点变量
                double WXYZ; // 定义WXYZ变量
                double rx, ry, startAngle, sweepAngle; // 定义半径和角度变量
                XVector3d directionX, directionY; // 定义方向向量变量
                arc.GetATFields3d(out centerOut, out WXYZ, out directionX, out directionY, out rx, out ry, out startAngle, out sweepAngle); // 将椭圆弧转换为BR类型的3D对象
            }
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/BasicCurve的基础常见方法。
        /// 功能：演示更多BasicCurve的用法: 克隆、获取线段、搜索最近点、获取线上的点等。
        /// 关键类及说明：
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线，包括克隆、获取线段、搜索最近点等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void DoSomeBasicCurveFuncs()
        {
            BasicCurve basic = CreateCurveSetMethods.CreateLineStringFromPts(); // 从点创建一个线串

            BasicCurve basicCopy = basic.Clone(); // 克隆基本曲线

            {
                double fractionA = 0.2; // 定义起始比例
                double fractionB = 0.8; // 定义终止比例
                bool allowExtrapolation = false; // 定义是否允许外推
                BasicCurve basicFrac = basic.CloneBetweenFractions(fractionA, fractionB, allowExtrapolation); // 返回从起始比例到终止比例的线
            }

            {
                XPoint3d spacePt = new XPoint3d(-10, 10, 10); // 定义空间点
                CurveDescInfo detail = basic.ClosestPointBounded(spacePt); // 搜索线上最近的点
                if (detail != null)
                {
                    double componentFrac = detail.ComponentFraction; // 获取最近点在所属的子曲线上的长度比例值
                    long componentIndex = detail.ComponentIndex; // 获取最近点所在的子曲线（BasicCurve)的索引
                    double frac = detail.Fraction; // 获取最近点的长度比例
                    XPoint3d pt = detail.Point; // 获取最近点的坐标
                }
            }

            {
                double frac = 0.3; // 定义比例值
                XPoint3d pt; // 定义点变量
                XVector3d tang, derivative1, derivative2; // 定义向量变量
                bool isSuccess = basic.FractionToPoint(frac, out pt, out tang, out derivative1, out derivative2); // 根据比例参数返回线上的点
            }

            BasicCurve.BasicCurveType type = basic.GetBasicCurveType(); // 获取线的类型

            {
                XPoint3d ptAdd = XPoint3d.Zero; // 定义要添加的点
                bool isSuccess = basic.TryAddLineStringPoint(ref ptAdd); // 给线串添加特征点
            }

            {
                XEllipse3d arc; // 定义圆弧变量
                bool isArc = basic.TryGetArc(out arc); // 获取圆弧
            }

            {
                List<XPoint3d> points; // 定义点列表
                bool isSuccess = basic.AddStrokes(out points, FacetOptionsExtension.CreateForCurves(), true, 0.2, 0.8); // 获取从起始比例到终止比例的线上的特征点
            }

            List<XPoint3d> listPts = basic.GetLineStringP(); // 获取线串
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/BSplineCurve的基础常见方法。
        /// 功能：演示更多BSplineCurve的用法: 获取极点、长度、端点、均分点、最近点等。
        /// 关键类及说明：
        ///     ATBsplineCurve: 表示三维空间中的B样条曲线。此类提供了多种方法来操作和查询B样条曲线，包括获取极点、长度、端点、均分点、最近点等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void DoSomeBSplineCurveFuncs()
        {
            ATBsplineCurve bsplineCurve = CreateCurveSetMethods.CreateATBsplineCurves_FromThroughPts(false); // 从通过点创建一个B样条曲线

            {
                List<XPoint3d> listPts = new List<XPoint3d>(); // 定义极点列表
                bsplineCurve.GetPoles(out listPts); // 获取所有极点
            }

            {
                int num = bsplineCurve.GetIntNumPoles(); // 获取极点个数
                double length = bsplineCurve.Length(); // 获取长度
                UInt64 order = bsplineCurve.GetOrder(); // 返回曲线阶数
            }

            {
                XPoint3d stPt, edPt; // 定义起始和终止点
                bsplineCurve.ExtractEndPoints(out stPt, out edPt); // 获取B样条曲线的起始或终止端点
            }

            {
                UInt64 num = 2; // 定义均分点数量
                List<XPoint3d> listPts = new List<XPoint3d>(); // 定义点列表
                List<double> listFrac = new List<double>(); // 定义比例列表
                bool isSuccess = bsplineCurve.PointsAtUniformArcLength(out listPts, out listFrac, num); // 计算在均分角度上的点
            }

            {
                XPoint3d spacePt = new XPoint3d(20, 5, 5); // 定义空间点
                XPoint3d curvePt; // 定义曲线上的点
                double fraction; // 定义长度比例
                bsplineCurve.ClosestPoint(out curvePt, out fraction, ref spacePt); // 获取曲线上离给定点最接近的点和对应的长度比例
            }
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/几何对象CurveSet的显示方法
        /// 功能：将CurveSet对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     CurveSet: 表示一组基本曲线的集合。此类可以是一组没有关系的BasicCurve，也可以组合多个BasicCurve，表达封闭多边形、开放线条等。
        ///     ATEC.ATDataCoreNET.ATObjects.ATObject: 玄镜平台对象，将几何体转换为ATObject并添加到场景(ATScene)中。玄镜平台统一显示、管理、提供操作。
        ///     ObjectPropertiesSetter: 用于设置对象的属性，如颜色等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_CurveSet(CurveSet curve, int color = 0)
        {
            if (curve == null)
            {
                return; // 如果曲线集为空，则返回
            }

            // 将曲线集转换为场景对象并显示在视口
            ATEC.ATDataCoreNET.ATObjects.ATObject curveSetObj =
                ATEC.ATDataCoreNET.ATObjects.GeometryToATObject.ToObject(scene.GetATScene(), curve, null); // 将曲线集转换为场景对象
            ObjectPropertiesSetter setter = new ObjectPropertiesSetter(); // 创建对象属性设置器
            setter.SetColor((uint)color); // 设置对象颜色
            setter.Apply(curveSetObj); // 应用属性设置
            curveSetObj.AddToScene(); // 将对象添加到场景中
        }


        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/BasicCurve的显示方法。
        /// 功能：将BasicCurve对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线。
        ///     ATEC.ATDataCoreNET.ATObjects.ATObject: 玄镜平台对象，将几何体转换为ATObject并添加到场景(ATScene)中。玄镜平台统一显示、管理、提供操作。
        ///     ObjectPropertiesSetter: 用于设置对象的属性，如颜色等。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_BasicCurve(BasicCurve basicCurve, int color = 0)
        {
            if (basicCurve == null)
            {
                return; // 如果基本曲线为空，则返回
            }

            // 将基本曲线转换为场景对象并显示在视口
            ATEC.ATDataCoreNET.ATObjects.ATObject curveSetObj =
                ATEC.ATDataCoreNET.ATObjects.GeometryToATObject.ToObject(scene.GetATScene(), basicCurve, null); // 将基本曲线转换为场景对象
            ObjectPropertiesSetter setter = new ObjectPropertiesSetter(); // 创建对象属性设置器
            setter.SetColor((uint)color); // 设置对象颜色
            setter.Apply(curveSetObj); // 应用属性设置
            curveSetObj.AddToScene(); // 将对象添加到场景中
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/XSegment3d的显示方法。
        /// 功能：将XSegment3d对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     XSegment3d: 表示三维空间中的线段。此类提供了多种方法来操作和查询线段。
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_XSegment(XSegment3d seg, int color = 0)
        {
            BasicCurve basic = BasicCurve.CreateLine(seg); // 从线段创建基本曲线
            AddToScene_BasicCurve(basic, color); // 将基本曲线添加到场景中
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/XEllipse3d的显示方法。
        /// 功能：将XEllipse3d对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     XEllipse3d: 表示三维空间中的椭圆弧。此类提供了多种方法来操作和查询椭圆弧。
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_XEllipse3d(XEllipse3d ellipse, int color = 0)
        {
            BasicCurve basic = BasicCurve.CreateArc(ellipse); // 从椭圆弧创建基本曲线
            AddToScene_BasicCurve(basic, color); // 将基本曲线添加到场景中
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/ATBsplineCurve的显示方法。
        /// 功能：将ATBsplineCurve对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     ATBsplineCurve: 表示三维空间中的B样条曲线。此类提供了多种方法来操作和查询B样条曲线。
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_ATBsplineCurve(ATBsplineCurve bsplineCurve, int color = 0)
        {
            BasicCurve basic = BasicCurve.CreateBsplineCurve(bsplineCurve); // 从B样条曲线创建基本曲线
            UseSomeBasicMethods.AddToScene_BasicCurve(basic, color); // 将基本曲线添加到场景中
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/XPoint3d的显示方法。
        /// 功能：将XPoint3d对象添加到场景中，并设置其颜色。
        /// 关键类及说明：
        ///     XPoint3d: 表示三维空间中的点。此类提供了多种方法来操作和查询点。
        ///     BasicCurve: 表示基本曲线。此类提供了多种方法来操作和查询基本曲线。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void AddToScene_Xpoint(XPoint3d pt, int color = 0)
        {
            XPoint3d ptV1 = new XPoint3d(0, 5, 0); // 定义垂直方向上的点
            XPoint3d ptV2 = new XPoint3d(0, -5, 0); // 定义垂直方向上的点
            XSegment3d segV = new XSegment3d(XPoint3dExtension.FromSumOf(pt, ptV1, 1), XPoint3dExtension.FromSumOf(pt, ptV2, 1)); // 创建垂直方向上的线段
            BasicCurve basicV = BasicCurve.CreateLine(segV); // 从线段创建基本曲线

            XPoint3d ptH1 = new XPoint3d(5, 0, 0); // 定义水平方向上的点
            XPoint3d ptH2 = new XPoint3d(-5, 0, 0); // 定义水平方向上的点
            XSegment3d segH = new XSegment3d(XPoint3dExtension.FromSumOf(pt, ptH1, 1), XPoint3dExtension.FromSumOf(pt, ptH2, 1)); // 创建水平方向上的线段
            BasicCurve basicH = BasicCurve.CreateLine(segH); // 从线段创建基本曲线

            XEllipse3d ellipse = XEllipse3d.FromCenterRadiusXY(pt, 10); // 从中心点和半径创建椭圆弧
            BasicCurve basicArc = BasicCurve.CreateArc(ellipse); // 从椭圆弧创建基本曲线

            AddToScene_BasicCurve(basicV, color); // 将垂直方向上的基本曲线添加到场景中
            AddToScene_BasicCurve(basicH, color); // 将水平方向上的基本曲线添加到场景中
            AddToScene_BasicCurve(basicArc, color); // 将椭圆弧的基本曲线添加到场景中
        }

        /// <summary>
        /// 分类：玄镜BIM图形平台/C#开发/示例代码/几何/修改/从场景中清理图形对象的方法。
        /// 功能：清理场景中的所有图形对象。
        /// 关键类及说明：
        ///     ATScene: 表示玄镜平台的场景。ATObject加入到场景，才能显示。
        ///     SceneObjectsCollection: 表示场景中的对象集合。此类提供了多种方法来操作和查询场景中的对象。
        /// 关键方法：
        ///     参见代码里注释.     
        /// </summary>
        public static void ClearScene()
        {
            ATScene sceneP = scene.GetATScene(); // 获取当前场景

            SceneObjectsCollection per = sceneP.GetGraphicObjects(); // 获取场景中的图形对象集合
            foreach (var obj in per)
            {
                obj.DeleteFromScene(); // 从场景中删除对象
            }
        }
    }
}
